#ifndef _POKER_DATA_H_
#define _POKER_DATA_H_

#include "Poker.h"
#include <vector>
#include <string>

using std::vector;
using std::string;

const int HAND_POKER_COUNT = 2;
const int FLOP_POKER_COUNT = 3;

class HandPoker {
  public:
    HandPoker(const Poker & one, const Poker & two);
    virtual ~HandPoker();
    const Poker * getHandPoker() const;
    string toString() const;
    bool isFlush() const;
  private:
    Poker * handPoker;
};

class FlopPoker {
  public:
    FlopPoker(const Poker & one, const Poker & two, const Poker & three);
    virtual ~FlopPoker();
    const Poker * getFlopPoker() const;
  private:
    Poker * flopPoker;
};

class TurnPoker {
  public:
    TurnPoker(const Poker & turnPoker);
    const Poker * getTurnPoker() const;
  private:
    Poker turnPoker;
};

class RiverPoker {
  public:
    RiverPoker(const Poker & riverPoker);
    const Poker * getRiverPoker() const;
  private:
    Poker riverPoker;
};

class PokerData {
  public:
    PokerData();
    virtual ~PokerData();    
    void setHandPoker(const HandPoker & handPoker);
    void setFlopPoker(const FlopPoker & flopPoker);
    void setTurnPoker(const TurnPoker & turnPoker);
    void setRiverPoker(const RiverPoker & riverPoker);
    vector<Poker> getPokers() const;
    static void sortData(vector<Poker> & data);
    static vector<Poker> getFlushData(vector<Poker> & data);
  private:
    HandPoker * pHandPoker;
    FlopPoker * pFlopPoker;
    TurnPoker * pTurnPoker;
    RiverPoker * pRiverPoker;
};
#endif
